const {
    User,
    validateLogin
} = require('../../../model/User');
// hash密码
const bcrypt = require('bcryptjs');
// 工具
const _ = require('lodash');

module.exports = async (req, res) => {
    // 数据格式校验
    const {
        error
    } = validateLogin(req.fields);
    // 格式不符合要求
    if (error) return res.sendResult(null, 400, error.message);
    // 查找用户
    let user = await User.findOne({
        account: req.fields.account
    });
    // 如果用户不存在 响应
    if (!user) return res.sendResult(null, 400, '用户名或密码错误');
    // 如果用户存在 验证密码 返回布尔值
    const validPassword = await bcrypt.compare(req.fields.password, user.password);
    // 密码错误 响应
    if (!validPassword) return res.sendResult(null, 400, '用户名或密码错误');
    // 如果用户状态不可用，响应
    if (!user.status) return res.sendResult(null, 400, '用户状态不可用，请联系管理员');
    // 将用户信息存储在session中
    req.session.userInfo = user;
    // 响应
    const resData = _.pick(user, ['nickname', 'account', 'role', 'avatar', '_id', 'status', 'createTime']);
    res.sendResult(resData, 200, '登录成功');
};